#include "CarStop.h"
#include <iostream>

//两个栈实现一个队列
class MyQueue
{
public:
    using ElementType = LinkStack::ElementType;
    void Push(const ElementType& element)
    {
        while(s2.IsEmpty()== false)
        {
            s1.Push(*s2.GetTop());
            s2.Pop();
        }
        s1.Push(element);
    }
    void Pop()
    {
        while(s1.IsEmpty() == false)
        {
            s2.Push(*s1.GetTop());
            s1.Pop();
        }
        s2.Pop();
    }

    ElementType *GetFront()
    {
        while(s1.IsEmpty() == false)
        {
            s2.Push(*s1.GetTop());
            s1.Pop();
        }
        return s2.GetTop();
    }

    bool IsEmpty()
    {
        return s1.IsEmpty() && s2.IsEmpty();
    }


private:
    LinkStack s1;
    LinkStack s2;
};

//两个队列实现一个栈
class MyStack
{
public:
    using ElementType = LinkStack::ElementType;
    void Push(const ElementType &element)
    {
        while(q2.IsEmpty()== false)
        {
            q1.Push(*q2.GetFront());
            q2.Pop();
        }
        q1.Push(element);
    }
    void Pop()
    {
        while(q1.Size()>1)
        {
            q2.Push(*q1.GetFront());
            q1.Pop();
        }
        q1.Pop();

        while (q2.IsEmpty() == false)
        {
            q1.Push(*q2.GetFront());
            q2.Pop(); 
        }
    }

    ElementType *GetTop()
    {
        while(q1.size()>1)
        {
            q2.Push(*q1.GetFront());
            q1.Pop();
        }

        ElementType r= *ql.GetFront();
        q2.Push(*q1.GetFront());
        q1.Pop();

        while(q2.IsEmpty()== false)
        {
            q1.Push(*q2.GetFront());
            q2.Pop();
        }
        return (ElementType*)r;
    }

    bool IsEmpty()
    {
        return s1.IsEmpty() && s2.IsEmpty();
    }
    ElementType *r=q1.GetFront();
    q2.Push(*q1.GetFront());



private:
    LinkStack s1;
    LinkStack s2;

};



int main()
{
    // CarStop s(3);
    // while (1)
    // {
    //     s.show();
    //     std::cout<<"1、车辆进入停车场\n";
    //     std::cout<<"2、车辆离开停车场\n";
    //     std::cout<<"3、退出\n";
    //     int choice = 0;
    //     std::cin>>choice;
    //     switch(choice)
    //     {
    //         case 1:s.ComeCar(),break;
    //         case 2:s.LeaveCar(),break;
    //         default:
    //             break;
    //     }
    // }
    
    MyQueue q;
    for(long i=1; i<=10; i++)
    q.Push((void*)i);

    while(q.IsEmpty()== false)
    {
        std::cout<<(long)*q.GetFront()<<" ";
        q.Pop();
    }
    std::cout<<std::endl;



return 0;
}
